
 1000  *---------------------------------
 1010  *      M-BYTE BY N-BYTE MULTIPLY
 1020  *---------------------------------
 1030  M      .EQ $00      # BYTES IN MULTIPLICAND
 1040  N      .EQ $01      # BYTES IN MULTIPLIER
 1050  PSIZE  .EQ $02      # BYTES IN PRODUCT
 1060  I      .EQ $03      LOOP COUNTER
 1070  J      .EQ $04      LOOP COUNTER
 1080  MULTIPLICAND .EQ $90 THRU ...
 1090  MULTIPLIER   .EQ $A0 THRU ...
 1100  PRODUCT      .EQ $B0 THRU ...
 1110  *---------------------------------
 1120  MXN.MPY
 1130  *---------------------------------
 1140  *      CLEAR THE PRODUCT REGISTER
 1150  *---------------------------------
 1160         LDY M        # BYTES IN MULTIPLICAND
 1170         STY PSIZE
 1180         LDA #0
 1190  .1     STA PRODUCT,Y
 1200         DEY
 1210         BPL .1
 1220  *---------------------------------
 1230  *      FOR I=M TO 1 STEP -1
 1240  *      PSIZE = PSIZE + 1
 1250  *      FOR J=8 TO 1 STEP -1
 1260  *---------------------------------
 1270         LDA N        # BYTES IN MULTIPLIER
 1280         STA I
 1290  .2     INC PSIZE
 1300         LDA #8
 1310         STA J
 1320  *---------------------------------
 1330  *      ACCUMULATE PARTIAL PRODUCT FOR NEXT BIT
 1340  *---------------------------------
 1350  .3     JSR SHIFT.MULTIPLIER.RIGHT
 1360         BCC .4       ZERO-BIT
 1370         JSR ACCUMULATE.PARTIAL.PRODUCT
 1380  .4     JSR SHIFT.PRODUCT.RIGHT
 1390  *---------------------------------
 1400  *      NEXT J : NEXT I
 1410  *---------------------------------
 1420         DEC J
 1430         BNE .3
 1440         DEC I
 1450         BNE .2
 1460         RTS
 1470  *---------------------------------
 1480  *      SHIFT MULTIPLIER RIGHT
 1490  *---------------------------------
 1500  SHIFT.MULTIPLIER.RIGHT
 1510         LDY N        # BYTES IN MULTIPLIER
 1520         LDX #0
 1530  .1     ROR MULTIPLIER,X
 1540         INX
 1550         DEY
 1560         BNE .1
 1570         RTS
 1580  *---------------------------------
 1590  *      SHIFT PRODUCT RIGHT
 1600  *---------------------------------
 1610  SHIFT.PRODUCT.RIGHT
 1620         LDY PSIZE    # BYTES IN PRODUCT
 1630         LDX #0
 1640  .1     ROR PRODUCT,X
 1650         INX
 1660         DEY
 1670         BPL .1
 1680         RTS
 1690  *---------------------------------
 1700  *      ACCUMULATE PARTIAL PRODUCT
 1710  *---------------------------------
 1720  ACCUMULATE.PARTIAL.PRODUCT
 1730         LDY M
 1740         DEY
 1750         CLC
 1760  .1     LDA MULTIPLICAND,Y
 1770         ADC PRODUCT,Y
 1780         STA PRODUCT,Y
 1790         DEY
 1800         BPL .1
 1810         RTS

